diff --git a/sympy/sets/handlers/intersection.py b/sympy/sets/handlers/intersection.py
index 8710b6db17..d206bba9c5 100644
--- a/sympy/sets/handlers/intersection.py
+++ b/sympy/sets/handlers/intersection.py
@@ -240,21 +240,26 @@ def intersection_sets(self, other): # noqa:F811
         if isinstance(other, ImageSet) and other.base_sets == (S.Integers,):
             gm = other.lamda.expr
             m = other.lamda.variables[0]
-        elif other is S.Integers:
-            m = gm = Dummy('x')
-        if gm is not None:
-            fn = self.lamda.expr
-            n = self.lamda.variables[0]
-            solns = list(diophantine(fn - gm, syms=(n, m)))
-            if len(solns) == 0:
-                return EmptySet
-            elif len(solns) != 1:
-                return
-            else:
-                soln, solm = solns[0]
+        else:
+            m = Dummy('m')
+            if other is S.Integers:
+                gm = m
+        fn = self.lamda.expr
+        n = self.lamda.variables[0]
+        solns = list(diophantine(fn - gm, syms=(n, m)))
+        if len(solns) == 0:
+            return EmptySet
+        else:
+            # Process all solutions to create a new ImageSet
+            # This will involve iterating over solns and constructing
+            # the appropriate ImageSet that represents all solutions.
+            sol_sets = []
+            for sol in solns:
+                soln, solm = sol
                 (t,) = soln.free_symbols
                 expr = fn.subs(n, soln.subs(t, n))
-                return imageset(Lambda(n, expr), S.Integers)
+                sol_sets.append(imageset(Lambda(n, expr), S.Integers))
+            return Union(*sol_sets)
 
     if other == S.Reals:
         from sympy.solvers.solveset import solveset_real
